#ifndef MINIPARASURFACE_H
#define MINIPARASURFACE_H

#include "MiniObject.h"

namespace XYF
{
    /**
     * @file: MiniParaSurface.h
     * @author: xingyifan
     * @date: 2023-04-22 23:11
     *
     * @description: 参数曲面类型
     */

    class MiniParaSurface : public MiniObject
    {
    public:
        MiniParaSurface(Func23 f, Real uLeft, Real uRight, Real vLeft, Real vRight);

        // 重载返回类型
        virtual int GetType() override;

        Real GetUBegin() const; // 获得 u 方向起始位置参数
        Real GetUEnd() const;   // 获得 u 方向结束位置参数
        Real GetVBegin() const; // 获得 v 方向起始位置参数
        Real GetVEnd() const;   // 获得 v 方向结束位置参数

        Vector3f SurfacePoint(Real u, Real v) const;        // 计算参数 u,v 处的点
        Vector3f SurfaceParUPoint(Real u, Real v) const;    // 计算参数 u,v 处 u 的偏导
        Vector3f SurfaceParVPoint(Real u, Real v) const;    // 计算参数 u,v 处 v 的偏导

    protected:
        Func23 m_f;     // 参数形式
        Real m_uLeft;   // 左边界
        Real m_uRight;  // 右边界
        Real m_vLeft;   // 左边界
        Real m_vRight;  // 右边界
    };

}

#endif // MINIPARASURFACE_H
